// https://leetcode.cn/problems/basic-calculator-ii/
// Created by ade on 2022/9/8.
// 给你一个字符串表达式 s ，请你实现一个基本计算器来计算并返回它的值。
//
//整数除法仅保留整数部分。
//
//你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。
//
//注意：不允许使用任何将字符串作为数学表达式计算的内置函数，比如 eval() 。
#include <iostream>
#include <vector>
#include <string>
#include <numeric>

using namespace std;

class Solution {
public:
    int calculate(string s) {
        vector<int> st;
        char op = '+';
        int num = 0;
        for (int i = 0; i < s.size(); i++) {
            if (isdigit(s[i])) {
                num = num * 10 + (s[i] - '0');
            }
            if (!isdigit(s[i]) && s[i] != ' '|| i == s.size() - 1) {
                switch (op) {
                    case '+':
                        st.push_back(num);
                        break;
                    case '-':
                        st.push_back(-num);
                        break;
                    case '*':
                        st.back() *= num;
                        break;
                    case '/':
                        st.back() /= num;
                        break;
                }
                op = s[i];
                num = 0;
            }
        }
        return accumulate(st.begin(), st.end(), 0);
    }
};

int main() {
    Solution so;
    // {"2", "1", "+", "3", "*"};
    cout << so.calculate("2147483647");
    return 0;
}